#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
const int N = 110, M = 10010;
int a[N];
int n;
bool dp[M];

int gcd(int a, int b)
{
    return !b ? a : gcd(b, a % b);
}

// 暴力解法：求出所有不能被提取出来的包子的数量

int main()
{
    // vector<int> v;
    cin >> n;
    for(int i = 1; i <= n; ++i) cin >> a[i];
    int d = 0;
    // 求出所有元素的最大公约数
    for(int i = 1; i <= n; ++i)
        d = gcd(d, a[i]);
    // 如果最大公约数不是1, 说明一定有很多不能凑出来的数
    // 裴蜀定理： gcd(x, y) = d, 一定存在 ax + by = d
    if(d != 1) cout << "INF\n";
    else
    {
        // 两两互质的数不能拼成的最小的数是(p - 1)(q - 1) - 1，
        // 如果有更多的数，一定是小于该值的
        // 完全背包问题，100以内两两互质的数最大
        dp[0] = true;
        for(int i = 1; i <= n; ++i)
            for(int j = a[i]; j < M; ++j)
            {
                dp[j] = dp[j] | dp[j - a[i]];
            }
        int res = 0;
        // cout << dp[n][3] << endl;
        for(int i = 1; i < M; ++i)
            if(!dp[i]) ++res;
        cout << res << endl;
    }
    return 0;
}